﻿#pragma once

#if !defined(__MINGW32__)
#define __MINGW32__
#endif

#include <mp4v2/mp4v2.h>
#include <string>

class Mp4Encoder
{
public:
	Mp4Encoder();

	/**
	* 初始化编码器
	*
	* @param config 音频编码配置
	* @param sampleNum 所有轨迹采样的固定持续时间。注意：该值应采用track-timescale单位。
	* @param sampleRate 轨迹的时间刻度（每秒为采样数为单位）。
	*/
	bool initMp4Encoder(std::string& config, int sampleNum, int sampleRate);

	/**
	* 编码视频
	* 
	* @param naluData h264数据源
	* @param naluSize 数据源大小
	* @param takeTime 每帧相隔时间, 以秒为单位
	*/
	void mp4VEncode(unsigned char* naluData, int naluSize, double takeTime);

	/**
	* 编码音频
	*
	* @param aacData aac数据源
	* @param aacSize 数据源大小
	*/
	void mp4AEncode(unsigned char* aacData, int aacSize);

	/** 关闭编码器 */
	void closeMp4Encoder();

public:
	int _videoWidth, _videoHeight, _videoTimeScale;
	MP4FileHandle _mp4FHandle;
	MP4TrackId _videoTrackId, _audioTrackId;
	std::string _filePathName;
};